package com.starblink.basic.util

import android.annotation.SuppressLint
import android.content.Context
import android.provider.MediaStore
import com.blankj.utilcode.util.FileUtils
import com.starblink.basic.util.log.YYLogUtils


object AlbumUtils {


    //你想发送图片时间限制 s
    const val SCREEN_SHOT_OFFET_TIME_S: Long = 60 * 2

    //过滤文件大小防止崩溃
    const val IMAGE_MAX_SIZE = 25 * 1024 * 1024

    /**
     * 获取一定时间内更新的图片( 项目中使用这个)
     * @param context
     * @return
     */
    @SuppressLint("Range")
    fun getLatestMediaPhoto(context: Context): Pair<Long?, String?>? {
        //查询路径和修改时间
        val projection =
            arrayOf(MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_MODIFIED)

        // SCREEN_SHOT_OFFET_TIME_S 表示查询30秒以内的的新插入的图片
        // /1000 的原因是:
        // SaveImageInBackgroundTask -> doInBackground()
        // -> values.put(MediaColumns.DATE_ADDED, mImageTime / 1000);
        //存储截图的时候存储的时间是 秒 所以需要/1000 变成秒
        val currentTime = System.currentTimeMillis() / 1000 - SCREEN_SHOT_OFFET_TIME_S
        //检查camera文件夹，查询并排序
        var mediaPair: Pair<Long?, String?>? = null
        val cursor = context.contentResolver.query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            projection,
            MediaStore.Images.Media.DATE_ADDED + " >= ?", arrayOf(currentTime.toString() + ""),
            MediaStore.Images.Media.DATE_ADDED + " DESC"
        )
        if (cursor!!.moveToFirst()) {
            val path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))
            if (path != null && FileUtils.isFileExists(path) && FileUtils.getFileLength(path) <= IMAGE_MAX_SIZE) {
                //填充更新时间 以及 地址
                //注意 cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED)) 有可能是秒有可能是毫秒
                //获取的时候做判断的时候需要注意
                mediaPair = Pair(
                    cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED)),
                    path
                )
            }
        }
        //对比
        return mediaPair
    }


    /**
     *
     * 实际上为了保险这个方法最好是异步去调用它这里为了演示方便就在ui线程调用了
     *
     *
     *
     * @param context
     *
     * @return
     */
//    fun getRecentlyPhotoPath(context: Context): String? {
//
//        //这个地方利用like 和通配符 来寻找 系统相机存储照片的地方
//
//        //实际上还可以做的更夸张一点，寻找所有目录下的照片 并且可以限定格式  只要修改这个通配符语句即可
//        val searchPath = MediaStore.Files.FileColumns.DATA + " LIKE '%" + "/DCIM/Camera/" + "%' "
//        val uri = MediaStore.Files.getContentUri("external")
//
//        //这里做一个排序，因为我们实际上只需要最新拍得那张即可 你甚至可以取表里的 时间那个字段 然后判断一下 距离现在是否超过2分钟 超过2分钟就可以不显示缩略图的 微信就是2分钟之内刚拍的图片
//
//        //会显示 超过了就不显示，这里主要就是看对表结构的理解
//        val cursor = context.contentResolver.query(
//            uri,
//            arrayOf(MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.SIZE),
//            searchPath,
//            null,
//            MediaStore.Files.FileColumns.DATE_ADDED + " DESC"
//        )
//        var filePath: String? = ""
//        if (cursor != null && cursor.moveToFirst()) {
//            filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA))
//        }
//        if (!cursor!!.isClosed) {
//            cursor.close()
//        }
//        return filePath
//    }


}